/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import DAO.RecursoDAO;
import Model.Recurso;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;

/**
 *
 * @author 0433101
 */
public class atualizarRecurso extends Processor {

    @Override
    public void execute() throws ServletException, IOException {
        getResponse().setContentType("text/html;charset=UTF-8");
        try{
            String id = (String) getRequest().getParameter("id");
            String nomeAntes = (String) getRequest().getParameter("nomeAntes");
            String nome = (String) getRequest().getParameter("nome");
            String q = (String) getRequest().getParameter("quantidade");
            String mais = (String) getRequest().getParameter("acrescentar");
            String menos = (String) getRequest().getParameter("diminuir");
            
            if(id == null || nomeAntes == null || nome == null || q == null || mais == null || menos == null){
                throw new ServletException();
            }            
            
            if(id.equals("") || nomeAntes.equals("") || nome.equals("") || q.equals("")){
                String erro = "Dados Inválidos!";
                getRequest().setAttribute("erro", erro);
                RequestDispatcher rd = getRequest().getRequestDispatcher("mostrarRecurso.jsp");
                rd.forward(getRequest(), getResponse());
            }
                        
            int id_recurso = Integer.parseInt(id);
            int quantidade = Integer.parseInt(q);
            if(quantidade >= 0){
                int acrescentar = -1;
                int diminuir = -1;
                if(!mais.equals("")){
                    acrescentar = Integer.parseInt(mais);
                    if(acrescentar < 0){
                        String erro = "Número a acrescentar deve ser maior que zero!";
                        getRequest().setAttribute("erro", erro);
                        RequestDispatcher rd = getRequest().getRequestDispatcher("mostrarRecurso.jsp");
                        rd.forward(getRequest(), getResponse());
                    }
                }
                if(!menos.equals("")){
                    diminuir = Integer.parseInt(menos);
                    if(diminuir < 0){
                        String erro = "Número a diminuir deve ser maior que zero!";
                        getRequest().setAttribute("erro", erro);
                        RequestDispatcher rd = getRequest().getRequestDispatcher("mostrarRecurso.jsp");
                        rd.forward(getRequest(), getResponse());
                    }
                    if(diminuir > quantidade){
                        String erro = "Número a diminuir não pode ser maior que a quantidade atual!";
                        getRequest().setAttribute("erro", erro);
                        RequestDispatcher rd = getRequest().getRequestDispatcher("mostrarRecurso.jsp");
                        rd.forward(getRequest(), getResponse());
                    }
                }
                if(acrescentar > -1){
                    quantidade += acrescentar;
                }
                if(diminuir > -1){
                    quantidade -= diminuir;
                }
            }
            
            Recurso recurso = new Recurso();
            recurso.setId_recurso(id_recurso);
            recurso.setNome_recurso(nome);
            recurso.setQuantidade_disponivel(quantidade);
            
            boolean sucesso = RecursoDAO.updateRecurso(recurso.getId_recurso(), recurso.getNome_recurso(), recurso.getQuantidade_disponivel(), nomeAntes);
            RequestDispatcher rd;
            if(sucesso){
                HttpSession session = getRequest().getSession();
                session.removeAttribute("destino");
                String mensagem = "Recurso Atualizado!";
                getRequest().setAttribute("mensagem", mensagem);
                rd = getRequest().getRequestDispatcher("menuAdministrador.jsp");
                rd.forward(getRequest(), getResponse());
            }
            else if(!sucesso){
                String erro = "Recurso já existe!";
                getRequest().setAttribute("erro", erro);
                rd = getRequest().getRequestDispatcher("mostrarRecurso.jsp");
                rd.forward(getRequest(), getResponse());
            }
        }
        catch(SQLException e){
            throw new ServletException(e); 
        }
        catch(ClassNotFoundException e){
            throw new ServletException(e);
        }
        catch(NumberFormatException e){
            String erro = "Números inválidos!";
            getRequest().setAttribute("erro", erro);
            RequestDispatcher rd = getRequest().getRequestDispatcher("mostrarRecurso.jsp");
            rd.forward(getRequest(), getResponse());                    
        }
    }
    
}
